****************************************************************************************************************************************
* Reproduction file for "The globalisation divide in the public mind: Belief systems on globalisation and their electoral consequences *
****************************************************************************************************************************************

* This do file cleans and recodes the GLES campaign panel dataset, which is available for public download at GESIS:
* Roßteutscher, S., Schmitt-Beck, R., Schoen, H., Weßels, B., Wolf, C., Preißinger, M., . . . Manger, L. (2018). Short-term Campaign Panel 2017, GLES, Version 6.0.0; doi:10.4232/1.13150.

/*
*** set version
	version 15.1

*** install ados used, if necessary
	ssc install fre
	ssc install coefplot
	ssc install estout
	ssc install tab_chi
	net install stata2mplus, from("https://stats.idre.ucla.edu/stat/stata/ado/analysis")
	
* install graph schemes used, if necessary
	ssc install blindschemes, all

*** load data set
	use "ZA6804_v6-0-0.dta", clear

*** run do-file to recode missing values
	do "ZA6804_missing.do"
	*Code available at GESIS, which is available for public download at GESIS:
	*Roßteutscher, S., Schmitt-Beck, R., Schoen, H., Weßels, B., Wolf, C., Preißinger, M., . . . Manger, L. (2018). Short-term Campaign Panel 2017, GLES, Version 6.0.0; doi:10.4232/1.13150.
	
*** save data set with coded missing values
	save "ZA6804_v6_mis.dta", replace
*/

	
********************************************************************************
************************** Recoding of GLES data *******************************
******************************************************************************** 

	use "ZA6804_v6_mis.dta", clear


********** Attitudes toward globalization (Alles in allem ist die Globalisierung eine gute Sache.) **********

	fre kp3_2880v
	clonevar globw3 = kp3_2880v
	label define globw ///
	1 "disagree completely" ///
	2 "disagree" ///
	3 "partly disagree, partly agree" ///
	4 "agree" ///
	5 "agree completely"
	label values globw3 globw
	gen globw3x = (globw3 - 1 ) / 4

	fre kp8_2880v
	clonevar globw8 = kp8_2880v
	label values globw8 globw
	gen globw8x = (globw8 - 1 ) / 4

	fre kp9_2880v
	clonevar globw9 = kp9_2880v
	label values globw9 globw
	gen globw9x = (globw9 - 1 ) / 4

	*Change variables
	*w3-w8
	gen globdiff83 = globw8 - globw3
	gen globadiff83 = abs(globdiff83)

	*w8-w9
	gen globdiff98 = globw9 - globw8
	gen globadiff98 = abs(globdiff98)

	*w3-w9
	gen globdiff93 = globw9 - globw3
	gen globadiff93 = abs(globdiff93)

	*w3-w8-w9
	gen globadiff983 = globadiff83 + globadiff98
	

********** Attitudes towards issues related to globalisation **********
	
*** Policy attitude: Economic openness 1 (Das weltweite Zusammenwachsen der Märkte sollte weiter vorangetrieben werden.)
	fre kp9_2880ag
	gen ecoopen1 = kp9_2880ag

*** Policy attitude: Economic openness 2 (Deutschland sollte die Einfuhr von Waren aus anderen Ländern einschränken. (reversed))
	fre kp9_2880ah
	gen ecoopen2 = 6 - kp9_2880ah
	tab kp9_2880ah ecoopen2
	
*** Policy attitude: Economic openness 3 (Ausländische Unternehmen sollten in Deutschland uneingeschränkt investieren dürfen. )
	fre kp9_2880ai
	mvdecode kp9_2880ai, mv(-99 = .a \ -98 = .b \ -97 = .c \ -95 = .d \ -93 = .e \ -92 = .f)
	gen ecoopen3 = kp9_2880ai


*** Policy attitudes: Immigration 1 (Jetzt geht es um die Frage, ob Zuzugsmöglichkeiten für Ausländer erleichtert oder eingeschränkt werden sollten.
									 *Und welche Meinung haben Sie persönlich zum Thema „Zuzugsmöglichkeiten von Ausländern“?)
	fre kp3_1130
	gen immi1 = 8 - kp3_1130
	
*** Policy attitudes: Immigration 2 (Deutschland braucht eine jährliche Obergrenze für die Aufnahme von Flüchtlingen.)
	fre kp4_2880x
	gen immi2 = 6 - kp4_2880x

*** Policy attitudes: Immigration 3 (Flüchtlinge, die aus wirtschaftlichen Gründen nach Deutschland kommen, sollten abgeschoben werden.)
	fre kp1_2880b
	gen immi3 = 6 - kp1_2880b


*** Policy attitudes: Europe (Sollte die europäische Einigung so vorangetrieben werden, dass es bald eine gemeinsame europäische Regierung gibt
							  *oder geht die europäische Einigung schon jetzt viel zu weit?
							  *Wie ist Ihre Meinung zu diesem Thema?)
	fre  kp1_1250
	gen europe1 = 8 - kp1_1250
	
*** Policy attitudes: Attachment to the EU  (Menschen fühlen sich unterschiedlich stark mit Deutschland, Europa, ihrem Bundesland und ihrer Gemeinde verbunden. Wie ist das bei Ihnen? Wie stark fühlen Sie sich verbunden mit … der Europäischen Union?)
	fre kp3_2200e
	gen europe2 = kp3_2200e
	
*** Policy attitudes: Europe (Deutschland sollte EU-Mitgliedsstaaten, die große wirtschaftliche und finanzielle Schwierigkeiten haben, finanziell unterstützen.)
	fre kp3_2880l
	gen europe3 = kp3_2880l
	
	
********** Attitudes towards other policy issues **********
		
*** Policy attitudes: Redistribution 1 (Der Staat sollte Maßnahmen ergreifen, um die Einkommensunterschiede zu verringern.)
	sum kp*_2880d
	gen redis1 = kp3_2880d

*** Policy attitudes: Redistribution 2 (Die Politik sollte eine Obergrenze für Manager-Gehälter einführen.)
	sum kp*_2880n
	gen redis2 = kp3_2880n

*** Policy attitudes: Redistribution 3 (Reiche Bürger sollten mehr Steuern bezahlen als bisher.)	
	sum kp*_2880j
	gen redis3 = kp2_2880j
	
	
*** Policy attitudes: Civil liberties 1 (Die staatlichen Befugnisse in der Kriminalitätsbekämpfung sollten ausgeweitet werden, auch wenn das zu einer stärkeren Überwachung der Bürger führt.)
	fre kp3_2880h
	gen civlib1 = 6 - kp3_2880h
	
*** Policy attitudes: Civil liberties 2 (Manche meinen, dass der Staat bei der Bekämpfung des Terrorismus ohne Einschränkungen in die Privatsphäre 
								   *und die Bewegungsfreiheit der Bürger eingreifen soll. Andere meinen, die Privatsphäre und Bewegungsfreiheit 
								   *der Bürger soll immer geschützt werden, auch wenn es die Terrorismusbekämpfung behindert.
								   *Und welche Meinung haben Sie persönlich zum Thema „Eingriffe des Staates bei der Terrorismusbekämpfung“?)	
	fre kp2_1411
	gen civlib2 = kp2_1411


*** Policy attitudes: Cultural liberalism (Auch gleichgeschlechtliche Lebenspartnerschaften sollten Kinder adoptieren können.)
	gen cultlib1 = kp3_2880a


********** Policy dimension indexes **********

	foreach var in immi1 europe1 civlib2 {
	gen `var'x = (`var' - 1) / 6
	}
	
	foreach var in ecoopen1 ecoopen2 ecoopen3 redis1 redis2 redis3 immi2 immi3 europe2 europe3 cultlib1 civlib1  {
	gen `var'x = (`var' - 1) / 4
	}

	egen redis_i = rowmean(redis1x redis2x redis3x)

	egen ecoopen_i = rowmean(ecoopen1x ecoopen2x ecoopen3x)
	
	egen immi_i = rowmean(immi1x immi2x immi3x)

	egen europe_i = rowmean(europe1x europe2x europe3x)

	egen civlib_i = rowmean(civlib1x civlib2x )

	egen glob_i = rowmean(globw3x globw8x globw9x)


********** Voting and party preferences **********

*** Voting intention
	fre kp9_190ba
	recode kp9_190ba (1 = 1 "CDU/CSU") (5 = 2 "FDP") (4 = 3 "SPD") (6 = 4 "Greens") (7 = 5 "The Left") (322 = 6 "AfD") (801 = 7 "other party") (.b = 8 "don't know") (.c = 9 "will not vote") , gen(vi)
	tab kp9_190ba vi, mis


*** Reported vote choice
	fre kp8_200ba
	fre kp9_200ba
	fre kp8_180 
	fre kp9_180
	clonevar votex=kp8_200ba
	replace vote=kp9_200ba if vote>.
	recode kp8_180 (1=0) (6=0) (2=1), gen(kp8_nonvote)
	recode kp9_180 (1=0) (6=0) (2=1), gen(kp9_nonvote)
	clonevar nonvote=kp8_nonvote
	replace nonvote=kp9_nonvote if nonvote>.
	fre vote
	fre nonvote

	recode votex (1 = 1 "CDU/CSU") (5 = 2 "FDP") (4 = 3 "SPD") (6 = 4 "Greens") (7 = 5 "The Left") (322 = 6 "AfD") (801 = 7 "other party") , gen(vote)
	replace vote = 8 if nonvote == 1
	lab def vote 8 "Did not vote", modify
	label values vote vote

	lab var vote "Reported vote choice, w8&9"
	
*** Party approval
	mvdecode kp9_430*, mv(-99 = .a \ -98 = .b \ -97 = .c \ -95 = .d \ -93 = .e \ -92 = .f \ -71 = .g)
	gen cdu9= (kp9_430a - 1) / 10
	gen csu9= (kp9_430b - 1) / 10
	gen spd9= (kp9_430c - 1) / 10
	gen fdp9= (kp9_430d - 1) / 10
	gen gru9= (kp9_430e - 1) / 10
	gen lin9= (kp9_430f - 1) / 10
	gen afd9= (kp9_430i - 1) / 10

	
********** Sociodemographic control variables **********

*** Age
	gen age_indec=(2017-kpx_2290) / 10
	
*** Education
	fre kp1_2320
	recode kp1_2320 (1 2 = 1) (3 = 2) (4 5 = 3) (9 = .), gen(educat)
	
*** Gender
	fre kpx_2280
	recode kpx_2280 (2 = 1) (1 = 0), gen(female)
	
*** Income 
	fre kp1_2591
	recode kp1_2591 (1 2 3 = 1 "<1000€") (4 5 6 = 2 "1000-2000€") (7 8 = 3 "2000-3000€") (9 = 4 "3000-4000€") (10 11 12 13 14 = 5 ">4000€"), gen(incomecat)	

*** State of residence:  East vs. West
	recode ostwest (-95 = .d) (0 = 1) (1 = 0), gen(east)


********** Other control and other variables **********
		
*** Economic situation (ego)
	sum kp*_780
	gen ecsit_ego1 = (5 - kp1_780) / 4
	
*** Economic situation (country)
	sum kp*_820
	gen ecsit_soc1 = (5 - kp1_820) / 4		
		
** Party identity
	fre kp1_2090a
	recode kp1_2090a (1 2 3 = 1 "CDU/CSU") (5 = 2 "FDP") (4 = 3 "SPD") (6 = 4 "Greens") (7 = 5 "The Left") (322 = 6 "AfD") (801 = 7 "other party") (808 = 8 "none") , gen(pi)
	
*** Candidate orientations
	mvdecode kp*_650a kp*_650c kp*_650s kp*_650x kp*_650z kp*_650w kp*_650y, mv(-99 = .a \ -98 = .b \ -97 = .c \ -95 = .d \ -93 = .e \ -92 = .f \ -71 = .g)

	*Merkel
	sum kp*_650a
	foreach i in 1 2 3 4 5 6 7 8 {
	gen merkel`i'=(kp`i'_650a-1)/10
	}
	egen merkel = rowmean(merkel*)
	
	*Seehofer
	sum kp*_650c
	foreach i in 1 2 3 4 5 6 7 8 {
	gen seeh`i'=(kp`i'_650c-1)/10
	}
	egen seeh = rowmean(seeh*)
	
	*Lindner
	sum kp*_650a
	foreach i in 1 2 3 4 5 6 7 8 {
	gen lindner`i'=(kp`i'_650s-1)/10
	}
	egen lindner = rowmean(lindner*)

	*Petry
	sum kp*_650p
	foreach i in 1 2 3 4 5 6 7 8 {
	gen petry`i'=(kp`i'_650p-1)/10
	}
	egen petry = rowmean(petry*)

	*Schulz
	sum kp*_650z
	foreach i in 2 3 4 5 6 7 8 {
	gen schulz`i'=(kp`i'_650z-1)/10
	}
	egen schulz = rowmean(schulz*)
	*Göring-Eckhart
	sum kp*_650w
	foreach i in 1 2 3 4 5 6 7 8 {
	gen goeeck`i'=(kp`i'_650w-1)/10
	}
	egen goeeck = rowmean(goeeck*)
	
	*Wagenknecht
	sum kp*_650y
	foreach i in 2 3 4 5 6 7 8 {
	gen wagenk`i'=(kp`i'_650y-1)/10
	}
	egen wagenk = rowmean(wagenk*)

	
*** Voting norm
	fre kp5_050l kp8_050l kp9_050l
	
	gen vnorm5 = kp5_050l 
	gen vnorm8 = kp8_050l 
	gen vnorm9 = kp9_050l 
	
	*w5-w8
	gen vnormdiff85 = kp8_050l - kp5_050l
	gen vnormadiff85 = abs(vnormdiff85)

	*w8-w9
	gen vnormdiff98 = kp9_050l - kp8_050l
	gen vnormadiff98 = abs(vnormdiff98)

	*w5-w9
	gen vnormdiff95 = kp9_050l - kp5_050l
	gen vnormadiff95 = abs(vnormdiff95)

	*w5-w8-w9
	gen vnormadiff985 = vnormadiff85 + vnormadiff98

	
*** Political interest
	fre kp3_010
	gen pint = (5 - kp3_010) / 4
	
*** Political knowledge 
	* Wahlrecht D.
	fre kp1_130
	gen pknow1 = .
	replace pknow1 = 0 if kp1_130 == 1 | kp1_130 == 2 | kp1_130 == 4 // dk as missing value
	replace pknow1 = 1 if kp1_130 == 3
	
	* Erst/Zweitstimme
	fre kp1_110
	gen pknow2 = .
	replace pknow2 = 0 if kp1_110 == 1 | kp1_110 == 2  // dk as missing value
	replace pknow2 = 1 if kp1_110 == 3
	
	* 5%-Klausel
	fre kp1_090
	gen pknow3 = .
	replace pknow3 = 1 if kp1_090 == 5
	replace pknow3 = 0 if (kp1_090 > 0 & kp1_090 < 5) | (kp1_090 > 5 & kp1_090 < 590)  // dk as missing value
	
	*Index
	egen pknow = rowmean(pknow1 pknow2 pknow3)

*** Political awareness
	gen pawa = (pint + pknow) / 2
	
	gen pawa_d = .
	replace pawa_d = 1 if pawa >= .625 & pawa <= 1 // split at the median
	replace pawa_d = 0 if pawa < .625
	
*** Schwartz values

	* Tradition
	fre kp1_3320j kp1_3320t
	pwcorr kp1_3320j kp1_3320t
	egen trad=rowmean(kp1_3320j kp1_3320t)
	replace trad=(trad-1)/5
	fre trad
	
	* Conformity
	desc kp1_3320n kp1_3320q 
	pwcorr kp1_3320n kp1_3320q
	egen konf=rowmean(kp1_3320n kp1_3320q)
	replace konf=(konf-1)/5
	fre konf

	* Security
	desc kp1_3320e kp1_3320m
	pwcorr kp1_3320e kp1_3320m
	egen sicher=rowmean(kp1_3320e kp1_3320m)
	replace sicher=(sicher-1)/5
	fre sicher

	* Universalism
	desc kp1_3320c kp1_3320h kp1_3320u
	pwcorr kp1_3320c kp1_3320h kp1_3320u 
	egen uni=rowmean(kp1_3320c kp1_3320h kp1_3320u)
	replace uni=(uni-1)/5
	fre uni

	* Benevolence
	desc kp1_3320k kp1_3320p
	pwcorr kp1_3320k kp1_3320p
	egen ben=rowmean(kp1_3320k kp1_3320p)
	replace ben=(ben-1)/5
	fre ben

*** self-transcendence (Benevolenz und Universalismus)
	egen selftran=rowmean(ben uni)
*** conservation (Sicherheit, Tradition, Konformität)
	egen cons=rowmean(trad konf sicher)

*** Standardize on each respondent's mean rating of all values to correct for scale use
	*http://www.europeansocialsurvey.org/docs/methodology/ESS1_human_values_scale.pdf
	egen schwartz_mean = rowmean(kp1_3320c kp1_3320h kp1_3320u kp1_3320k kp1_3320p kp1_3320d kp1_3320l kp1_3320b kp1_3320o kp1_3320f kp1_3320s kp1_3320a kp1_3320i kp1_3320e kp1_3320m kp1_3320j kp1_3320n kp1_3320q kp1_3320t)
	gen schwartz_meanx=(schwartz_mean - 1) / 5
	gen selftran_c = selftran - schwartz_meanx
	gen cons_c = cons - schwartz_meanx


********************************************************************************
************************** Reduce, save and export *****************************
******************************************************************************** 
		
*** Reduce data set	
	keep lfdn globw3 - cons_c

***	Save reduced data set
	save "DATA_stata.dta", replace

*** Export to Mplus
	use "DATA_stata.dta"

	stata2mplus ecoopen1 ecoopen2 ecoopen3 ///
           immi1 immi2 immi3 ///
           europe1 europe2 europe3 ///
           globw3 globw8 globw9 ///
           redis1 redis2 redis3 ///
           civlib1 civlib2 cultlib1 ///
	using "DATA_mplus", replace
